package com.ruoyi.plot.service.impl;

import java.util.List;
import java.util.Objects;

import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.building.domain.BuildingInformation;
import com.ruoyi.building.mapper.BuildingInformationMapper;
import com.ruoyi.plot.domain.dto.request.PlotQueryForPageReqDTo;
import com.ruoyi.plot.domain.dto.request.PlotSaveOrUpdateReqDTo;
import com.ruoyi.plot.domain.dto.response.PlotInfoResDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import com.ruoyi.plot.mapper.PlotMapper;
import com.ruoyi.plot.domain.Plot;
import com.ruoyi.plot.service.IPlotService;

/**
 * 小区功能列表Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-09-13
 */
@Service
public class PlotServiceImpl implements IPlotService 
{
    @Autowired
    private PlotMapper plotMapper;

    @Autowired
    private BuildingInformationMapper buildingInformationMapper;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 查询小区功能列表
     * 
     * @param id 小区功能列表主键
     * @return 小区功能列表
     */
    @Override
    public PlotInfoResDTO selectPlotById(Long id)
    {
        Plot plot = plotMapper.selectPlotById(id);
        PlotInfoResDTO plotInfoResDTO = BeanUtil.toBean(plot, PlotInfoResDTO.class);
        return plotInfoResDTO;
    }

    /**
     * 查询小区功能列表列表
     * 
     * @param plotQueryForPageReqDTo 小区功能列表
     * @return 小区功能列表
     */
    @Override
    public List<PlotInfoResDTO> selectPlotList(PlotQueryForPageReqDTo plotQueryForPageReqDTo)
    {
        //查询小区列表
        Plot plot = BeanUtil.toBean(plotQueryForPageReqDTo, Plot.class);
        List<Plot> plotList = plotMapper.selectPlotList(plot);
        //遍历小区列表并将楼盘信息赋值
        plotList.forEach(plotInfo -> {
            BuildingInformation buildingInformation = buildingInformationMapper.selectBuildingInformationById(plotInfo.getBuildingId());
            //判断是否为空
            if (Objects.isNull(buildingInformation)) {
                plotInfo.setBuildingInformation(new BuildingInformation());
            } else {
                plotInfo.setBuildingInformation(buildingInformation);
            }
        });
        //将小区列表信息存入缓存
        ListOperations<String, String> opsForList = stringRedisTemplate.opsForList();
        opsForList.leftPushAll("plotList", JSON.toJSONString(plotList));
        //返回小区列表信息
        return BeanUtil.copyToList(plotList, PlotInfoResDTO.class);
    }

    /**
     * 新增小区功能列表
     * 
     * @param plotSaveOrUpdateReqDTo 小区功能列表
     * @return 结果
     */
    @Override
    public int insertPlot(PlotSaveOrUpdateReqDTo plotSaveOrUpdateReqDTo)
    {
        Plot plot = BeanUtil.toBean(plotSaveOrUpdateReqDTo, Plot.class);
        int i = plotMapper.insertPlot(plot);
        return i;
    }

    /**
     * 修改小区功能列表
     * 
     * @param plotSaveOrUpdateReqDTo 小区功能列表
     * @return 结果
     */
    @Override
    public int updatePlot(PlotSaveOrUpdateReqDTo plotSaveOrUpdateReqDTo)
    {
        Plot plot = BeanUtil.toBean(plotSaveOrUpdateReqDTo, Plot.class);
        int i = plotMapper.updatePlot(plot);
        return i;
    }

    /**
     * 批量删除小区功能列表
     * 
     * @param ids 需要删除的小区功能列表主键
     * @return 结果
     */
    @Override
    public int deletePlotByIds(Long[] ids)
    {
        return plotMapper.deletePlotByIds(ids);
    }

    /**
     * 删除小区功能列表信息
     * 
     * @param id 小区功能列表主键
     * @return 结果
     */
    @Override
    public int deletePlotById(Long id)
    {
        return plotMapper.deletePlotById(id);
    }
}
